package com.example.message_queue.mqserver.core;

import lombok.Data;

import java.io.Serializable;
import java.util.UUID;

/**
 * Created with Intellij IDEA.
 * Description;
 * User:TQ02
 * Data:2024-03-23
 * Time:14:24
 * Text：消息
 * 此类需要在网络上传输，也需要可以写入文件当中
 * 需要对此类进行序列化和反序列化，
 * 可使用 标准库 自带的序列化和反序列化
 */
@Data                           //序列化
public class Message implements Serializable {

    private BasicProertirs basicProertirs = new BasicProertirs();
    private byte[] body;

    //一个文件会存储很多消息，所以如何查找某个消息呢？
    //使用以下两个偏移量，不需要被序列化:transient
    private transient long offsetBeg=0;
    private transient long offsetEnd=0;

    //表示该消息是否有效
    //0x1有效，0x0无效
    private byte isValid=0x1;

    //创建一个工厂方法，让工厂方法封装一下创建的Message对象的过程
    //会自动生成唯一的MessageId
    public static Message createMessageWithId(String routingKey,BasicProertirs basicProertirs,byte[] body){
        Message message=new Message();
        if(basicProertirs!=null){
            message.setBasicProertirs(basicProertirs);
        }
        message.setMessageId("M-"+ UUID.randomUUID());
        message.setRoutingKey(routingKey);
        message.body=body;
        return message;
    }

    public String getMessageId(){
        return basicProertirs.getMessageId();
    }
    public void setMessageId(String messageId){
            basicProertirs.setMessageId(messageId);
    }
    public String getRoutingKey(){
        return basicProertirs.getRoutingKey();
    }
    public void setRoutingKey(String routingKey){
        basicProertirs.setRoutingKey(routingKey);
    }
    public int getDeliverMode(){
        return basicProertirs.getDeliverMode();
    }
    public void setDeliverMode(int num){
        basicProertirs.setDeliverMode(num);
    }
}
